Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - dopolni...
Tekmovanja - popravi...
Tekmovanja - Parsons
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 1996

rtk 1996


1996.1.1 (preuredi)

Urejanje števil

1. podnaloga

Katja zelo rada programira, zato je napisala funkcijo, ki sprejme seznam števil, jih uredi po velikosti od najmanjšega do največjega in vrne urejen seznam. Nekega jutra je bila zelo zaspana in je datoteko s funkcijo odprla z napačnim urejevalnikom. Ta ji je nesramno pomešal vrstice funkcije.

Naloga

Preuredi dane vrstice funkcije uredi_stevila(seznam) tako, da bo ponovno delovala.

j = i
n = len(seznam)
j += -1
def uredi_stevila(seznam):
i = 1
seznam[j-1], seznam[j] = seznam[j], seznam[j-1]
while i < n:
i += 1
while j > 0 and seznam[j-1] > seznam[j]:
return seznam

Vhodni podatki

Seznam števil, ki niso urejena po velikosti.

Izhodni podatki

Seznam s števili, urejenimi po velikosti naraščajoče.

Komentar

Funkcija je eden izmed znanih algoritmov za urejanje seznamov. Lahko si pomagaš s člankom na Wikipedii.

Uradna rešitev

def uredi_stevila(seznam):
    '''Sprejme seznam števil in jih uredi po velikosti naraščajoče.'''

    n = len(seznam)
    i = 1
    while i < n:
        j = i
        while j > 0 and seznam[j-1] > seznam[j]:
            seznam[j-1], seznam[j] = seznam[j], seznam[j-1]
            j += -1
        i += 1
    return seznam

1996.1.3 (preuredi)

Domača naloga

1. podnaloga

Miha je na računalniku napisal domačo nalogo za slovenščino in jo poslal očetu v pregled. Oče je vanjo vpisal svoje pripombe tako, da jih je obdal z znakoma < na začetku in > na koncu.

Naloga

Preuredi vrstice funkcije odstrani_komentarje(niz), ki bo iz Mihove domače naloge odstranila vse komentarje.

komentar = False
nov_niz += znak
if znak == '<':
def odstrani_komentarje(niz):
for znak in niz:
if not komentar:
nov_niz = ""
return nov_niz
komentar = False
komentar = True
continue
elif znak == '>':
continue

Vhodni podatki

Domača naloga napisana v obliki niza.

Izhodni podatki

Domača naloga v obliki niza, brez očetovih komentarjev.

Primer

Vhod
>>> odstrani_komentarje('Danes je lepo, sončno vreme <kaj pa še, danes dežuje> in ptički pojejo.')
Izhod
'Danes je lepo, sončno vreme  in ptički pojejo.'

Komentar

Dvojnih presledkov, ki nastanejo pri brisanju komentarjev, ni treba odstraniti.

Uradna rešitev

def odstrani_komentarje(niz):
    '''Funkcija iz besedila odstrani vse kar se nahaja med znakoma < in >.'''

    nov_niz = ""
    komentar = False
    for znak in niz:
        if znak == '<':
            komentar = True
            continue
        elif znak == '>':
            komentar = False
            continue

        if not komentar:   # nahajamo se zunaj komentarja
            nov_niz += znak
    return nov_niz

1996.2.1 (preuredi)

Palindromi števil

1. podnaloga

Besedo ali stavek, ki se nazaj bere enako kot naprej, imenujemo palindrom. Podobno so številski palindromi števila, katerih zapis v desetiškem sistemu je z desne proti levi enak kot z leve proti desni (taki števili sta naprimer $48584$ in $232$).

Katera pa so števila, za katere je vsota števila (npr. $16$) in njegovega obrata ($61$: število $16$ preberemo od desne proti levi) palindrom?

Naloga

Preuredi vrstice funkcije vsota_palindrom(n), ki vrne vsa zgoraj opisana števila med $0$ in $n$ (števili $0$ in $n$ nista zajeti) in vrstice pomožne funkcije obrat_stevila. Vrstice obeh funkcij so ločene s prazno vrstico.

while x > 0:
def obrat_stevila(x):
return y
y = y * 10 + x % 10
x = (x - y % 10) / 10
y = 0

ustrezna_stevila = []
ustrezna_stevila.append(i)
def vsota_palindrom(n):
if obrat_stevila(obrat_stevila(i) + i) == obrat_stevila(i) + i:
return ustrezna_stevila
for i in range(1, n):

Vhodni podatki

Število $n$, do katerega želimo poiskati vsa ustrezna števila.

Izhodni podatki

Seznam števil, ki ustrezajo opisu.

Primer

>>> vsota_palindrom(10)
    [1, 2, 3, 4]

Uradna rešitev

def obrat_stevila(x):
    '''Funkcija vrne število, ki ga dobimo, če x zapišemo
       v desetiškem sistemu in ga preberemo od desne proti levi.'''

    y = 0
    while x > 0:
        y = y * 10 + x % 10
        x = (x - y % 10) / 10
    return y

def vsota_palindrom(n):
    '''Funkcija izpiše vsa števila do n, za katera velja,
       da je vsota števila in njegovega obrata palindrom.'''

    ustrezna_stevila = []
    for i in range(1, n):
        if obrat_stevila(obrat_stevila(i) + i) == obrat_stevila(i) + i:
            ustrezna_stevila.append(i)
    return ustrezna_stevila
Mesto objave ob koncu projekta 15.9.2018